<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="../vue.js"></script>
</head>

<body>
  <div id="app">
    <son></son>
  </div>

  <template id="son">
    <div>
      <h2>我是son组件</h2>
      <button @click="sonBtnClick">我是son按钮</button>
      <sonchild></sonchild>
    </div>
  </template>

  <template id="sonchild">
    <div>
      <h2>我是sonchild组件</h2>
      <button @click="sonChildBtnClick">我是sonchild按钮</button>
    </div>
  </template>

  <script>
    const app = new Vue({
      el: "#app",
      data: {
        message: "我是根组件的数据"
      },
      components: {
        son: {
          template: "#son",
          data() {
            return {
              message: "我是son组件的数据"
            }
          },
          methods: {
            sonBtnClick() {
              // 通过parent访问父组件
              console.log(this.$parent);
              // 通过parent访问父组件的数据
              console.log(this.$parent.message);
            }
          },
          components: {
            sonchild: {
              template: "#sonchild",
              methods: {
                sonChildBtnClick() {
                  // 通过 $root 访问根组件
                  console.log(this.$root);
                  console.log(this.$root.message);

                  // 通过$parent 访问父组件
                  console.log(this.$parent);
                  console.log(this.$parent.message);
                }
              }
            }
          }
        }
      }
    })
  </script>
</body>

</html>